﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Insifo.WE;
using System.Text.RegularExpressions;
using System.Collections.Specialized;


public partial class genCentroCostoEditar : ObjectPage
{
    #region CONSTANTES

    private const string RUTA_LISTA = "~/gen/genCentroCostoListar.aspx";

    #endregion

    #region EVENTOS

    protected void Page_Load(object sender, EventArgs e)
    {
        //Eventos del Master
        Master.MenuAccionEvento += new MasterPageMenuEditarClickHandler(Master_MenuButton);
        if (!IsPostBack)
        {            
            Cargar();
        }
    }

    protected void Master_MenuButton(object sender, EventArgs e)
    {
        string strAccion = ((CommandEventArgs)e).CommandName;
        switch (strAccion)
        {
            case "Aceptar":
                Guardar("G");
                break;
            case "Aplicar":
                Guardar("A"); 
                break;
            case "Cancelar":
                Salir();
                break;
        }
    }


    #endregion

    #region METODOS

    protected void Cargar()
    {
        string strAccion =  Request.QueryString["a"];   //a: N-Nuevo, e-Editar, v-Ver
        string strId = Request.QueryString["i"];  //Id
        //Eventos Java Script
        this.Master.MenuAceptar.Attributes.Add("OnClick", "javascript:return fnValidar();");
        //this.txtCentroCostoRelacionado.Attributes.Add("onkeyup", "javascript:return fnIngresoNumeroDecimales(this,0,false);");
        //this.ddlTipoConsolidado.Attributes.Add("onchange", "javascript:return fnConfiguraSegunTipoConsolidado();");

        //Cargar Estado 
        //Util.loadComboAndItem(ddlIdPais, ListarPais(), "Descripcion", "IdPais", "-- Seleccione --", "0");
        ucPersonaSel.Inicializar("S", "", "S", "S");

        //Carga el Tipo Situacion
        Util.loadComboAndItem(ddlTipo, ListarParametroDetalle(1, UsuarioSistema.IdAplicacion, Constantes.PARAMETRO_TIPOCENTROCOSTO), "Descripcion", "ParametroDetalle", "-- " + Resources.resDiccionario.Seleccione + " --", "");
        Util.loadCombo(ddlEstado, ListarParametroDetalle(1, 1, Constantes.PARAMETRO_ESTADOREGISTRO), "Descripcion", "ParametroDetalle");

        //->JDL 30-01-2014.
        Util.loadComboAndItem(ddlNivelCosteo, ListarParametroDetalle(1, UsuarioSistema.IdAplicacion, Constantes.PARAMETRO_NIVELCOSTEO), "Descripcion", "ParametroDetalle", "-- " + Resources.resDiccionario.Seleccione + " --", "");
        Util.loadComboAndItem(ddlSucursal, ListarSucursal(), "Descripcion", "IdSucursal", "-- Seleccione --", "0");

        //Grupos CC
        Util.loadComboAndItem(ddlGrupo, ListarGrupo(), "Descripcion", "Codigo", "-- Seleccione --", "0");
        Util.loadComboAndItem(ddlSubGrupo, ListarSubGrupo(), "Descripcion", "Codigo", "-- Seleccione --", "0");

        Util.loadComboAndItem(ddlTipoGastoDirecto , ListarParametroDetalle(1, UsuarioSistema.IdAplicacion, Constantes.PARAMETRO_GASTODIRECTO), "Descripcion", "ParametroDetalle", "-- " + Resources.resDiccionario.Seleccione + " --", "");
        Util.loadComboAndItem(ddlTipoGastoFijo , ListarParametroDetalle(1, UsuarioSistema.IdAplicacion, Constantes.PARAMETRO_GASTODIRECTO), "Descripcion", "ParametroDetalle", "-- " + Resources.resDiccionario.Seleccione + " --", "");

        this.txtPorcentajeFijo.Attributes.Add("onkeyup", "javascript:return fnIngresoNumeroDecimales(this,2,false);");
        this.txtPorcentajeMovil.Attributes.Add("onkeyup", "javascript:return fnIngresoNumeroDecimales(this,2,false);");
        this.txtKilometrajePromedio.Attributes.Add("onkeyup", "javascript:return fnIngresoNumeroDecimales(this,2,false);");

        switch (strAccion)
        {
            case "n":
                Master.SubTitulo.Text = Resources.resDiccionario.Nuevo;
                Nuevo();
                break;
            case "e":
                Master.SubTitulo.Text = Resources.resDiccionario.Editar;
                Editar(strAccion, strId);
                break;
            case "d":
                Master.SubTitulo.Text = Resources.resDiccionario.Inactivar;
                Editar(strAccion, strId);
                break;
            default:
                Master.SubTitulo.Text = Resources.resDiccionario.Unknow;
                break;
        }
    }

    protected void Nuevo()
    {
        hfIdCentroCosto.Value = "0";
        hfAccion.Value = "n"; //Nuevo
        txtIdCentroCosto.Text = string.Empty;
        //txtCodigoDepa.Text = string.Empty;
        txtDescripcion.Text = string.Empty;
        txtCodigoCentroCosto.Text = string.Empty;
      //  txtCuenta.Text = string.Empty;
             
        //Datos de Auditoria
       // ddlIdPais.SelectedIndex = 0; //Representa el primero
        ddlEstado.SelectedIndex = 0; //Representa el primero
        txtUsuarioCreacion.Text = string.Empty;
        txtFechaCreacion.Text = string.Empty;
        txtUsuarioModificacion.Text = string.Empty;
        txtFechaModificacion.Text = string.Empty;
    }
    
    protected void Editar(string pstrAccion, string pstrIdCentroCosto)
    {        

        WCCentroCosto.BECentroCosto be = new WCCentroCosto.BECentroCosto
        {
            IdCentroCosto = Int32.Parse(pstrIdCentroCosto)
        };
        be = ObtenerCentroCosto(be);

        hfIdCentroCosto.Value = pstrIdCentroCosto;
        hfAccion.Value = pstrAccion; //Editar/Eliminarç

        txtIdCentroCosto.Text = be.IdCentroCosto.ToString();
        txtIdSupervisor.Text = be.IdSupervisor.ToString();
        
        txtCodigoCentroCosto.Text = be.CodigoCentroCosto;
        txtDescripcion.Text = be.Descripcion;

        if (be.IdCuentaEstadistica > 0)
        {
            txtCodigoCuentaEstadistica.Text = be.IdCuentaEstadistica.Equals(0) ? string.Empty : be.IdCuentaEstadistica.ToString();
            hfCodigoCuentaEstadistica.Value = be.IdCuentaEstadistica.ToString();

            WCCuentas.BECuentas beCuSp = ObtenerCuenta(be.IdCuentaEstadistica.ToString());
            txtDescripcionCuentaEstadistica.Text = beCuSp.Descripcion;
            hfCodigoCuentaEstadistica.Value = beCuSp.Descripcion;

        }

        if (be.IdCuentaAjusteInflacion > 0)
        {
            txtCodigoCuentaAjuste.Text = be.IdCuentaAjusteInflacion.Equals(0) ? string.Empty : be.IdCuentaAjusteInflacion.ToString();
            hfCodigoCuentaAjuste.Value = be.IdCuentaAjusteInflacion.ToString();

            WCCuentas.BECuentas beCuASp = ObtenerCuenta(be.IdCuentaAjusteInflacion.ToString());
            txtDescripcionCuentaAjuste.Text = beCuASp.Descripcion;
            hfDescripcionCuentaAjuste.Value = beCuASp.Descripcion;

        }
        if (!string.IsNullOrEmpty(be.Codigo)) // se almacena temporalmente el codigo del 
        {
            txtCodigoResponsable.Text = be.Codigo.Equals(0) ? string.Empty : be.Codigo;
           
            WCResponsableSpring.BEResponsable beReSp = ObtenerResponsable(be.IdCuentaAjusteInflacion.ToString());
            txtDescripcionResponsable.Text = beReSp.Descripcion;

        }

        if (!string.IsNullOrEmpty(be.Clasificacion))
        {
            txtCodigoClasificacion.Text = be.Clasificacion.Equals(0) ? string.Empty : be.Clasificacion.ToString();

            WCClasificacionCC.BEClasificacionCC beClSp = ObtenerCLasificacion(txtCodigoClasificacion.Text);
            txtDescripcionClasificacion.Text = beClSp.Descripcion;

        }
        cbxAdministrativo.Checked = be.GastoAdministrativo == "S" ? true : false;
        cbxVenta.Checked = be.GastoVenta == "S" ? true : false;
        cbxFinanciero.Checked = be.GastoFinanciero == "S" ? true : false;
        cbxProduccion.Checked = be.GastoProduccion == "S" ? true : false;
        cbxIngresos.Checked = be.Ingresos == "S" ? true : false;
        //cbxDirecto.Checked = be.GastoDirecto == "S" ? true : false;
        //cbxFijo.Checked = be.GastoFijo == "S" ? true : false;
        Util.SelectCombo(ddlTipoGastoDirecto, be.GastoDirecto);
        Util.SelectCombo(ddlTipoGastoFijo, be.GastoFijo);

        Util.SelectCombo(ddlGrupo, be.IdGrupoCentroCosto.ToString());
        Util.SelectCombo(ddlSubGrupo, be.IdSubGrupoCentroCosto.ToString());

        Util.SelectCombo(ddlTipo, be.Tipo);

        if (be.IdSupervisor != null)
        {
            WCPersona.BEPersona bePer = ObtenerPersona((int)be.IdSupervisor);
            txtNombreBusqueda.Text = bePer.NombreCompleto;
            hfIdSupervisor.Value = be.IdSupervisor.ToString();
            hfNombreSupervisor.Value = bePer.NombreCompleto;
        }

        //add - JDL:
        
        txtPorcentajeFijo.Text = be.ComisionFijo.ToString();
        txtPorcentajeMovil.Text = be.ComisionMovil.ToString();
       // Util.SelectCombo(ddlClasificacion, be.Clasificacion);
        Util.SelectCombo(ddlNivelCosteo, be.NivelCosteo  );
        Util.SelectCombo(ddlSucursal, be.IdSucursal.ToString());
        Util.SelectCombo(ddlGrupo, be.IdGrupoCentroCosto.ToString());
        txtCodigoInterno.Text = be.CodigoInterno;
        txtKilometrajePromedio.Text = be.KilometragePromedio.ToString();

        //Datos de Auditoria
        //Util.SelectCombo(ddlIdPais, be.IdPais.ToString());
        Util.SelectCombo(ddlEstado,be.Estado);
        
        txtUsuarioCreacion.Text = be.UsuarioCreacion;
        txtFechaCreacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
        txtUsuarioModificacion.Text = be.UsuarioModificacion;
        txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);

        if (pstrAccion == "d")
        {
            Master.MenuAplicar.Visible = false; //Remueve el boton aplicar
            txtDescripcion.Enabled = false;
            //cbVigente.Enabled = false;
            ddlEstado.Enabled = false;

            if (be.Estado == Constantes.ESTADO_ACTIVO)
            {
                Util.SelectCombo(ddlEstado, Constantes.ESTADO_INACTIVO);
            }
            else
            {
                Util.SelectCombo(ddlEstado, Constantes.ESTADO_ACTIVO);
            }
        }
    }

    protected bool Validar(out WCCentroCosto.BECentroCosto pbe)
    {
        pbe = new WCCentroCosto.BECentroCosto();
        string strCodigoCentroCosto = string.Empty, strDescripcion = string.Empty, strImagen = string.Empty;
        string strUsuario = string.Empty, strEstado = string.Empty;
        string strAccion = string.Empty;
        string strCuenta = string.Empty;
        string strIdPersona = string.Empty;
        string strAdministrativo = string.Empty;
        string strVenta = string.Empty;
        string strFinanciero = string.Empty;
        string strProduccion = string.Empty;
        string strIngresos = string.Empty;
        string strDirecto = string.Empty;
        string strFijo = string.Empty;
        string strTipo = string.Empty;
        int? inIdSupervisor = null;

        string strComisionFijo = "", strComisionMovil = "", strNivelAutorizacion = "", strNivelCosteo = "";
        string strIdSucursal = "", strClasificacion = "";
           
        string strCodigoInterno = "", strKilometrajePromedio = "", strCodigoResponsable = "";
        Decimal ldcComisionFijo = 0, ldcComisionMovil = 0, ldcKilometrajePromedio = 0;
        int lnIdSucursal = 0, intIdCuentaEstadistica = 0, intIdCuentaAjuste = 0, intIdResponsable = 0, intIdGrupoCentroCosto = 0, intIdSubGrupoCentroCosto = 0;

        strAccion = hfAccion.Value; //a: n-Nuevo, e-Editar, v-Ver

        strIdPersona = hfIdSupervisor.Value.Trim();
        if (!string.IsNullOrEmpty(strIdPersona))
        {
            inIdSupervisor = int.Parse(strIdPersona.ToString());
        }

        strCodigoCentroCosto = txtCodigoCentroCosto.Text.Trim();
        strDescripcion = txtDescripcion.Text.Trim();
        strAdministrativo = cbxAdministrativo.Checked ? "S" : "N";
        strVenta = cbxVenta.Checked ? "S" : "N";
        strFinanciero = cbxFinanciero.Checked ? "S" : "N";
        strProduccion = cbxProduccion.Checked ? "S" : "N";
        strDirecto = ddlTipoGastoDirecto.SelectedValue.ToString(); //cbxDirecto.Checked ? "S" : "N";
        strFijo = ddlTipoGastoFijo.SelectedValue.ToString();  //cbxFijo.Checked ? "S" : "N";
        strIngresos = cbxIngresos.Checked ? "S" : "N";
        strCodigoResponsable = txtCodigoResponsable.Text;
        strEstado = ddlEstado.SelectedValue;
        strTipo = ddlTipo.SelectedValue;
        strUsuario = UsuarioSistema.CodigoUsuario;

        strNivelCosteo = ddlNivelCosteo.SelectedValue.ToString();
        
        Int32.TryParse(txtCodigoCuentaEstadistica.Text, out intIdCuentaEstadistica);
        Int32.TryParse(txtCodigoCuentaAjuste.Text, out intIdCuentaAjuste);
        

        strIdSucursal = ddlSucursal.SelectedValue.ToString();
        strClasificacion = txtCodigoClasificacion.Text;
        Int32.TryParse(ddlGrupo.SelectedValue.ToString(), out intIdGrupoCentroCosto);
        Int32.TryParse(ddlSubGrupo.SelectedValue.ToString(), out intIdSubGrupoCentroCosto);
        strCodigoInterno = txtCodigoInterno.Text;

        strComisionFijo = txtPorcentajeFijo.Text;
        strComisionMovil = txtPorcentajeMovil.Text;
        strKilometrajePromedio = txtKilometrajePromedio.Text;

        Decimal.TryParse(strComisionFijo, out ldcComisionFijo);
        Decimal.TryParse(strComisionMovil, out ldcComisionMovil);
        Decimal.TryParse(strKilometrajePromedio, out ldcKilometrajePromedio);
        int.TryParse(strIdSucursal, out lnIdSucursal);

        //Inicializa
        WCCentroCosto.BECentroCosto be = new WCCentroCosto.BECentroCosto
        {
            IdCentroCosto = Int32.Parse(hfIdCentroCosto.Value),
            IdSupervisor = inIdSupervisor,
            CodigoCentroCosto = strCodigoCentroCosto,
            Descripcion = strDescripcion,
            CuentaAjusteInflacion = strCuenta,
            Tipo = strTipo,
            IdGrupoCentroCosto = intIdGrupoCentroCosto,
            IdSubGrupoCentroCosto = intIdSubGrupoCentroCosto,

            GastoAdministrativo = strAdministrativo,
            GastoVenta = strVenta,
            GastoFinanciero = strFinanciero,
            GastoProduccion = strProduccion,
            GastoFijo = strFijo,
            GastoDirecto = strDirecto,
            Ingresos = strIngresos,

            ComisionFijo = ldcComisionFijo,
            ComisionMovil = ldcComisionMovil,
            NivelAutorizacion = strNivelAutorizacion,
            //IdResponsable = intIdResponsable,
            Codigo = strCodigoResponsable,
            NivelCosteo = strNivelCosteo,
            IdCuentaAjusteInflacion = intIdCuentaAjuste,
            IdCuentaEstadistica = intIdCuentaEstadistica,
            IdSucursal = lnIdSucursal,
            Clasificacion = strClasificacion,
            CodigoInterno = strCodigoInterno,
            KilometragePromedio = ldcKilometrajePromedio,

            Estado = strEstado,
            UsuarioCreacion = strUsuario,
            FechaCreacion = DateTime.Now,
            UsuarioModificacion = strUsuario,
            FechaModificacion = DateTime.Now
        };
        pbe = be;
        txtIdSupervisor.Text = hfIdSupervisor.Value;
        txtNombreBusqueda.Text = hfNombreSupervisor.Value;
        return true;

    }

    protected void Guardar(string pstrEvento) //G:Grabar, A:Aplicar
    {
        string strAccion = string.Empty;
        string strUsuario = string.Empty;

        strAccion = hfAccion.Value; //a: n-Nuevo, e-Editar, v-Ver
        strUsuario = UsuarioSistema.CodigoUsuario;

        WCCentroCosto.BECentroCosto be;
         
        if (!Validar(out be)) //Valida e Inicializa
        {
            return;
        }

        //Grabar
        switch (strAccion)
        {
            case "n": //Nuevo
                be = InsertarCentroCosto(be);
                if (be.Error != 0)
                {
                    Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", "Error al registrar la CentroCosto."));
                }
                hfAccion.Value = "e";
                hfIdCentroCosto.Value = be.IdCentroCosto.ToString();
                txtIdCentroCosto.Text = be.IdCentroCosto.ToString();
              
                txtUsuarioCreacion.Text = strUsuario;
                txtFechaCreacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
                txtUsuarioModificacion.Text = strUsuario;
                txtFechaModificacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
                break;
            case "e": //Actualiza
                be = ActualizarCentroCosto(be);
                if (be.Error != 0)
                {
                    Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", "Error al actualizar la CentroCosto"));
                }
                txtUsuarioModificacion.Text = strUsuario;
                txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);

                break;
            case "d": //Elimina
                be = EliminaCentroCosto(be);
                txtUsuarioModificacion.Text = strUsuario;
                txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);

                if (be.Error != 0)
                {
                    Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", "Error al actualizar el CentroCosto."));
                }
                break;
        }
        if (pstrEvento == "G") { if (be.Error == 0) { Salir(); } }
    }

    protected void Salir()
    {
        string strCadena = string.Format("?a=l&param1={0}", HttpUtility.UrlDecode(Request.QueryString["param1"]));
        Util.Redireciona(RUTA_LISTA, strCadena, true);
    }


    #endregion

    #region LLAMDAS A WEBSERVICES

    /// <summary>
    /// Método Lista Niveles de Alerta
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCCentroCosto.BECentroCosto InsertarCentroCosto(WCCentroCosto.BECentroCosto pbe)
    {
        WCCentroCosto.BECentroCosto be = new WCCentroCosto.BECentroCosto();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCCentroCosto.IWCCentroCosto>("BasicHttpBinding_IWCCentroCosto"))
        {
            var response = client.ServiceOperation<WCCentroCosto.BECentroCosto>(
               c => c.Insertar(pbe)
               );
            ;
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Obtiene Nivel de Alerta
    /// </summary>
    /// <returns>Devuelve un Objeto</returns>
    protected WCCentroCosto.BECentroCosto ObtenerCentroCosto(WCCentroCosto.BECentroCosto pbe)
    {
        WCCentroCosto.BECentroCosto be = new WCCentroCosto.BECentroCosto();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCCentroCosto.IWCCentroCosto>("BasicHttpBinding_IWCCentroCosto"))
        {
            var response = client.ServiceOperation<WCCentroCosto.BECentroCosto>(
               c => c.Obtener(pbe)
               );
            ;
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Actualiza un Nivele de Alerta
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCCentroCosto.BECentroCosto ActualizarCentroCosto(WCCentroCosto.BECentroCosto pbe)
    {
        WCCentroCosto.BECentroCosto be = new WCCentroCosto.BECentroCosto();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCCentroCosto.IWCCentroCosto>("BasicHttpBinding_IWCCentroCosto"))
        {
            var response = client.ServiceOperation<WCCentroCosto.BECentroCosto>(
               c => c.Actualizar(pbe)
               );
            ;
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Elimina un Nivele de Alerta
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCCentroCosto.BECentroCosto EliminaCentroCosto(WCCentroCosto.BECentroCosto pbe)
    {
        WCCentroCosto.BECentroCosto be = new WCCentroCosto.BECentroCosto();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCCentroCosto.IWCCentroCosto>("BasicHttpBinding_IWCCentroCosto"))
        {
            var response = client.ServiceOperation<WCCentroCosto.BECentroCosto>(
               c => c.Eliminar(pbe)
               );
            ;
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Obtiene las cuentas registradas en Spring
    /// </summary>
    /// <returns>Devuelve un Objeto</returns>
    protected WCCuentas.BECuentas ObtenerCuenta(string pstrCodigo)
    {
        WCCuentas.BECuentas be = new WCCuentas.BECuentas();
        be.Codigo = pstrCodigo;
        using (var client = new ServiceClient<WCCuentas.IWCCuentas>("BasicHttpBinding_IWCCuentas"))
        {
            var response = client.ServiceOperation<WCCuentas.BECuentas>(
               c => c.ObtenerCuentas(be)
               );
            ;
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Obtiene las clasificaciones de los CC de Spring
    /// </summary>
    /// <returns>Devuelve un Objeto</returns>
    protected WCClasificacionCC.BEClasificacionCC ObtenerCLasificacion(string pstrCodigo)
    {
        WCClasificacionCC.BEClasificacionCC be = new WCClasificacionCC.BEClasificacionCC();
        be.Codigo = pstrCodigo;
        using (var client = new ServiceClient<WCClasificacionCC.IWCClasificacionCC>("BasicHttpBinding_IWCClasificacionCC"))
        {
            var response = client.ServiceOperation<WCClasificacionCC.BEClasificacionCC>(
               c => c.ObtenerClasificacionCC(be)
               );
            ;
            be = response;
        }
        return be;
    }


    /// <summary>
    /// Método Obtiene el Responsable segun el codigo desde Spring
    /// </summary>
    /// <returns>Devuelve un Objeto</returns>
    protected WCResponsableSpring.BEResponsable ObtenerResponsable(string pstrCodigo)
    {
        WCResponsableSpring.BEResponsable be = new WCResponsableSpring.BEResponsable();
        be.Codigo = pstrCodigo;
        using (var client = new ServiceClient<WCResponsableSpring.IWCResponsable>("BasicHttpBinding_IWCResponsable"))
        {
            var response = client.ServiceOperation<WCResponsableSpring.BEResponsable>(
               c => c.ObtenerResponsable(be)
               );
            ;
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Lista Datos de ParametroDetalle
    /// </summary>
    /// <returns>Devuelve un dataTable</returns>
    protected DataTable ListarParametroDetalle(int pintidCompania, int pintIdAplicacion, string pstrParametro)
    {
        WCParametroDetalle.BEParametroDetalle be = new WCParametroDetalle.BEParametroDetalle();
        be.IdCompania = pintidCompania;
        be.IdAplicacion = pintIdAplicacion;
        be.Parametro = pstrParametro;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCParametroDetalle.IWCParametroDetalle>("BasicHttpBinding_IWCParametroDetalle"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar(be).Tables[0]);
            dt = response;
        }
        return dt;
    }

    /// <summary>
    /// Método Lista Sucursal
    /// </summary>
    /// <returns>Devuelve un dataTable</returns>
    protected DataTable ListarSucursal()
    {
        
        WCSucursal.BESucursal be = new WCSucursal.BESucursal();
        be.Estado = "A";

        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCSucursal.IWCSucursal>("BasicHttpBinding_IWCSucursal"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar(be).Tables[0]);
            dt = response;
        }
        return dt;
    }


    /// <summary> 
    /// Método Lista Datos de Cliente 
    /// </summary> 
    /// <returns>Devuelve un dataTable</returns> 
    protected WCPersona.BEPersona ObtenerPersona(int pinIdPersona)
    {
        WCPersona.BEPersona be = new WCPersona.BEPersona();
        be.IdPersona = pinIdPersona;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCPersona.IWCPersona>("BasicHttpBinding_IWCPersona"))
        {
            var response = client.ServiceOperation<WCPersona.BEPersona>(c => c.Obtener(be));
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Lista Los Grupos de Centro de Costo del Maestro de Spring
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected DataTable ListarGrupo()
    {
        WCGruposCCSpring.BEGrupoCC be = new WCGruposCCSpring.BEGrupoCC();
        be.Codigo = string.Empty;
        be.Descripcion = string.Empty;
        be.Estado = "A";
        be.Pagina = 0;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCGruposCCSpring.IWCGrupoCC>("BasicHttpBinding_IWCGrupoCC"))
        {
            var response = client.ServiceOperation<DataTable>(
               c => c.ListarGrupo(be).Tables[0]
               );
            ;
            dt = response;
        }
        return dt;
    }

    /// <summary>
    /// Método Lista Los Grupos de Centro de Costo del Maestro de Spring
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected DataTable ListarSubGrupo()
    {
        WCGruposCCSpring.BEGrupoCC be = new WCGruposCCSpring.BEGrupoCC();
        be.CodigoSubGrupo = string.Empty;
        be.DescripcionSubGrupo = string.Empty;
        be.Estado = "A";
        be.Pagina = 0;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCGruposCCSpring.IWCGrupoCC>("BasicHttpBinding_IWCGrupoCC"))
        {
            var response = client.ServiceOperation<DataTable>(
               c => c.ListarSubGrupo(be).Tables[0]
               );
            ;
            dt = response;
        }
        return dt;
    }

    #endregion

}